/* 
泛型:
    指在定义函数、接口或类的时候，不预先指定具体的类型，而在使用的时候再指定具体类型的一种特性。

需求:
  创建一个函数, 实现功能: 根据指定的数量 count 和数据 value , 创建一个包含 count 个 value 的数组
*/

(() => {
  
  function createArray(count: number, value: any): any[] {
    const result: any[] = []

    for (let index = 0; index < count; index++) {
      result.push(value)
    }

    return result
  }

  const arr1 = createArray(3, 'abcd')
  const arr2 = createArray(3, 12.1234)
  console.log(arr1[1].length2)
  console.log(arr2[1].length)



})();

(() => {  
  /* 
  1. 定义泛型: 在函数定义时, 函数名的右侧 <T>
  2. 使用泛型: 在形参和函数体中使用
  3. 指定具体类型: 在调用函数时, 函数名的右侧 <具体类型>
  */
  function createArray<T>(count: number, value: T): T[] {
    const result: T[] = []

    for (let index = 0; index < count; index++) {
      result.push(value)
    }

    return result
  }

  const arr3 = createArray<string>(3, 'abc')
  arr3[1].length
  const arr4 = createArray<number>(3, 123)
  arr4[1].toString().length

})()